Data storage systems are often configured to maintain a copy or “mirror” of a primary data storage device (hereinafter the “primary”), where data written to the primary are written to a secondary data storage device (hereinafter the “secondary”) during a synchronization process. When there is a break in the synchronization process, such as where there is a loss of communications with the secondary, data often continue to be written to the primary, thereby resulting in a loss of synchronization between the primary and the secondary. Once communication with the secondary is reestablished, a resynchronization process is typically initiated to bring the secondary up-to-date. Resynchronization may be performed where the primary storage controller keeps track of which data on the primary have changed, requiring only the changed data to be written to the secondary. This may be done by maintaining a bitmap representing the locations of changed data on the primary that were written to since communication with the secondary was lost, or by calculating and comparing signatures for copies of data on both the primary and the secondary. However, during some primary failures such bitmaps might become lost or corrupted (in some storage platforms the bitmaps can not be maintained), while signature calculation and comparison is processing-intensive and time-consuming, and is also probabilistic, which may lead to data loss. Alternatively, full resynchronization may be performed, where all data on the primary are copied to the secondary. Unfortunately, this solution is even more time-consuming, and typically results in unnecessary copying of identical data.
A storage resynchronization mechanism that allows for fast resynchronization with no data loss would therefore be advantageous.